import os import random import tkinter as tk from tkinter import messagebox from PIL import Image, ImageTk # Folder where images are stored IMAGE_FOLDER = "C:/Users/Admin/PycharmProjects/PythonProject1/Images/Spellingtest" class SpellingTest: def __init__(self, root): self.root = root self.root.title("Spelling Test") self.root.state("zoomed") # Open in maximized mode # Get all JPG images from the folder self.image_files = [f for f in os.listdir(IMAGE_FOLDER) if f.endswith(".jpg")] random.shuffle(self.image_files) # Shuffle to randomize questions self.current_image_index = 0 # Main layout frame self.main_frame = tk.Frame(self.root) self.main_frame.pack(pady=20, padx=20, fill=tk.BOTH, expand=True) # Left side: Image display self.image_frame = tk.Frame(self.main_frame) self.image_frame.grid(row=0, column=0, padx=50, pady=20) self.image_label = tk.Label(self.image_frame) self.image_label.pack() # Right side: Spelling progress and alphabet buttons self.controls_frame = tk.Frame(self.main_frame) self.controls_frame.grid(row=0, column=1, padx=50, pady=20) self.word_display = tk.Label(self.controls_frame, text="", font=("Arial", 40, "bold")) self.word_display.pack(pady=20) self.buttons_frame = tk.Frame(self.controls_frame) self.buttons_frame.pack() # Load first question self.load_new_question() def load_new_question(self): if self.current_image_index >= len(self.image_files): messagebox.showinfo("Well Done!", "You've completed all words!") self.root.quit() return # Get the next image and extract the answer self.current_image_file = self.image_files[self.current_image_index] self.correct_word = os.path.splitext(self.current_image_file)[0].lower() self.current_index = 0 # Tracks progress in spelling # Load and display the image (Increased size to 500x500) image_path = os.path.join(IMAGE_FOLDER, self.current_image_file) self.image = Image.open(image_path) self.image = self.image.resize((500, 500), Image.LANCZOS) self.photo = ImageTk.PhotoImage(self.image) self.image_label.config(image=self.photo) self.image_label.image = self.photo # Update progress display self.word_display.config(text="_ " * len(self.correct_word)) # Reset and create alphabet buttons for widget in self.buttons_frame.winfo_children(): widget.destroy() self.create_alphabet_buttons() def create_alphabet_buttons(self): alphabet = "abcdefghijklmnopqrstuvwxyz" for i, letter in enumerate(alphabet): btn = tk.Button(self.buttons_frame, text=letter.upper(), font=("Arial", 24, "bold"), width=5, height=2, command=lambda l=letter: self.check_letter(l)) btn.grid(row=i // 7, column=i % 7, padx=8, pady=8) def check_letter(self, letter): if letter == self.correct_word[self.current_index]: self.update_word_display(letter) self.current_index += 1 if self.current_index == len(self.correct_word): messagebox.showinfo("Correct!", f"You spelled '{self.correct_word}' correctly!") self.current_image_index += 1 self.load_new_question() else: messagebox.showwarning("Try Again", "Wrong letter, try again!") def update_word_display(self, letter): displayed = list(self.word_display["text"].replace(" ", "")) displayed[self.current_index] = letter.upper() self.word_display.config(text=" ".join(displayed)) # Run the program root = tk.Tk() app = SpellingTest(root) root.mainloop()